import org.junit.jupiter.api.Test;

import javax.jnlp.ClipboardService;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class _17_电话号码的字母组合 {
    //用来存来结果集
    List<String > result=new ArrayList<>();
    //用来存放每一种结果
    StringBuilder temp=new StringBuilder();
    String [] arr={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

    @Test
    void test(){
        System.out.println(letterCombinations("23"));

    }

    /**
     * 使用回溯法
     * 比如23，我们先遍历2的所有字符，然后递归调用3的所有字符
     * @param digits
     * @return
     */
    public List<String> letterCombinations(String digits) {

        if (digits==null||digits.length()==0){
            return result;
        }
        backTracking(digits,0);
        return result;



    }
    //回溯函数
    //digits表示传入的字符串，num表示递归结束的标志，就是num等于digits长度的时候
    public void backTracking(String digits,int num){
        //定义递归结束的条件
        if (num==digits.length()){
            //将结果加入到结果集中
            result.add(temp.toString());
            return;
        }
        String str = arr[digits.charAt(num) - '0'];
        for (int i = 0; i <str.length(); i++) {
            temp.append(str.charAt(i));
            //然后递归调用下一个字符集合
            backTracking(digits,num+1);
            //这里将结果加入到
            temp.deleteCharAt(temp.length()-1);
        }



    }

}
